/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.mybatis.model;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.sql.DataSource;
import org.netbeans.modules.db.explorer.ConnectionList;
import org.netbeans.modules.db.explorer.DatabaseConnection;
import org.openide.util.Exceptions;

/**
 *
 * @author ProjetGWTPhp
 */
public class DataBaseMetaDataView {

    private java.sql.Connection conexion = null;
    private java.sql.ResultSet rs;
    private java.util.List<DataBaseTable> listTable= new ArrayList<DataBaseTable>();
    private java.util.List<DataBaseTableColumn> listColumn= new ArrayList<DataBaseTableColumn>();
    
    public static final String TABLE = "TABLE";

    /**
     * Establece la conexion y muestra las tablas y columnas de cada tabla
     */
    public DataBaseMetaDataView(DBConnection DBCn) {
        this.estableConexion(DBCn);
        this.muestraTablas();
    }

    public List<DataBaseTable> getListTable() {
        return listTable;
    }

    public List<DataBaseTableColumn> getListColumn() {
        return listColumn;
    }

    public ResultSet getRs() {
        return rs;
    }

    /**
     * Estable la conexion con la base de datos
     */
    public void estableConexion(DBConnection DBCn) {
        //ConnectionList f = org.netbeans.modules.db.explorer.ConnectionList.getDefault();
        //DatabaseConnection[] connections = f.getConnections();
        org.netbeans.modules.db.explorer.DbDriverManager dbm = org.netbeans.modules.db.explorer.DbDriverManager.getDefault();
   
        try {
            conexion = dbm.getConnection(DBCn.getDataBaseURL(), DBCn.getProps(), DBCn.getDriver());
            //conexion = getDataSource().getConnection();
        } catch (SQLException ex) {
            Exceptions.printStackTrace(ex);
        }
    }

    /**
     * Muetras las columnas de unta tabla de un catalogo dado
     */
    public  void muestraColumnas(String catalogo, String tabla) {
        java.sql.DatabaseMetaData metaDatos;
        try {
            metaDatos = conexion.getMetaData();
            //String ca=conexion.getCatalog();
            //ca=conexion.getMetaData().getURL();
            this.listColumn=new ArrayList();
            ResultSet rs = metaDatos.getColumns(catalogo, null, tabla, null);
            while (rs.next()) {
                
                
                
                // El contenido de cada columna del ResultSet se puede ver en
                // la API de java, en el metodo getColumns() de DataBaseMetaData
                // La 4 corresponde al TABLE_NAME
                // y la 6 al TYPE_NAME
                String nombreColumna = rs.getString(4);
                String tipoColumna = rs.getString(6);
                this.listColumn.add(new DataBaseTableColumn(nombreColumna,tipoColumna));
                System.out.println("   COLUMNA, nombre=" + nombreColumna
                        + " tipo = " + tipoColumna);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * Muestra las tablas de base de datos de la conexion actual y las columnas
     * de cada una de las tablas.
     */
    
    public void muestraTablas() {
        if (null == conexion) {
            return;
        }
        try {
            java.sql.DatabaseMetaData metaDatos = conexion.getMetaData();
            ResultSet rs = metaDatos.getTables(null, null, "%", new String[]{DataBaseMetaDataView.TABLE});
            //Integer row=rs.getMetaData().getColumnCount();
            while (rs.next()) {
                // El contenido de cada columna del ResultSet se puede ver
                // en la API, en el metodo getTables() de DataBaseMetaData.
                // La columna 1 es TABLE_CAT
                // y la 3 es TABLE_NAME
                String catalogo = rs.getString(2);
                String tabla = rs.getString(3);
                this.listTable.add(new DataBaseTable(catalogo,tabla));
                System.out.println("TABLA=" + catalogo + "." + tabla);

                //muestraColumnas(catalogo, tabla);
            }

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
//    public static DataSource getDataSource() {
//        org.apache.commons.dbcp.BasicDataSource dataSource = new org.apache.commons.dbcp.BasicDataSource();
//
//        ConnectionList f = org.netbeans.modules.db.explorer.ConnectionList.getDefault();
//        DatabaseConnection[] connections = f.getConnections();
//
//        String dataBase = connections[2].getDatabase();
//        String user = connections[2].getUser();
//        String pwd = connections[2].getPassword();
//        String driver = connections[2].getDriver();
//
//        dataSource.setDriverClassName(driver);
//        dataSource.setUrl(dataBase);
//        dataSource.setUsername(user);
//        dataSource.setPassword(pwd);
//
//        return dataSource;
//    }
}
